home *** CD-ROM | disk | FTP | other *** search
-
-
-
- - 1 -
-
-
-
- 4. _K_n_o_w_n__P_r_o_b_l_e_m_s__a_n_d__W_o_r_k_a_r_o_u_n_d_s
-
-
- This chapter lists the problems with the OpenGL Performer
- libraries and with the shared memory configurations.
-
- Note: This list is specific to OpenGL Performer for IRIX
- systems. Known problems with OpenGL Performer for Linux can
- be found in the Linux release notes, installed in
- /usr/doc/performer-2.5/ (Linux only).
-
-
- 4.1 _IIII_RRRR_IIII_XXXX _6666_...._5555
-
- In IRIX 6.5 through IRIX 6.5.4, a change in the semantics of
- sginap() can cause frames to be missed if the application is
- running in FLOAT or LOCK phase and finishing more than a
- full field early. The sginap() call is used by OpenGL
- Performer specifically in the case where the application
- finishes more than a full field ahead of schedule. This
- does not affect applications running at field rate (ie. 60
- Hz) or applications running at their requested rate. This
- was fixed in the IRIX 6.5.5 update.
-
- A workaround is to give the program a realtime scheduling
- priority using the npri program (which must be run as root
- or with the CAP_SCHED_MGT capability):
-
- # npri -s RR -r <any number 0-255> <program> <args>
-
- or:
-
- # npri -s FIFO -r <any number 0-255> <program> <args>
-
- To allow users to run npri without full root permissions,
- you can give the npri program the set-capability-on-
- execution attribute:
-
- # chcap CAP_SCHED_MGT+eip /usr/sbin/npri
-
- If you later want to change it back:
-
- # chcap all= /usr/sbin/npri
-
- See the _n_p_r_i(1) and _c_h_c_a_p(1) references pages for more
- information.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - 2 -
-
-
-
- _4._2 _GGGG_eeee_nnnn_eeee_rrrr_aaaa_llll _IIII_RRRR_IIII_XXXX _IIII_ssss_ssss_uuuu_eeee_ssss
-
- +o _6._x _O_S _b_u_g _w_i_t_h _s_h_a_r_e_d _a_r_e_n_a _p_l_a_c_e_m_e_n_t: An obscure bug
- in IRIX 6.2-6.4 with default placement of the shared
- arena can cause programs to die due to lack of heap
- space for malloc. Typcially the program will die during
- X or GL initialization with a message like:
-
- PF Warning/Internal(12): pfWindow::openNewNoPort()
- - null visual
- Xlib: sequence lost (0x10002 > 0x10) in reply type
- 0x0
- X Error: 0
- Request Major Code 0 ()
- Error Serial #2
- Current Serial #16
-
- Running the program through the unix system call
- tracer (par):
-
- par -s -i -SS prog options
-
- will show messages like:
-
- 966mS[ 1]perfly_ogl( 4781): brk(0x10086e58)
- errno = 12 (Not enough space)
-
- shortly before the death.
-
- Workaround: through the environment variable
- PFSHAREDBASE or in with pfSharedArenaBase() before
- pfInit(), explicitly set the address of the arena so
- that it is not too close to the heap and does not
- collide with other DSOs. An address that has worked
- with programs exhibiting the problem that are very
- close to perfly is: 0x18000000.
-
- ex:
-
- pfSharedArenaBase(0x18000000);
-
- or
-
- setenv PFSHAREDBASE 0x18000000
-
- If this address is not sufficient, run again with par
- and the following environment variables set:
-
- setenv _RLD_PATH /usr/lib/rld.debug; setenv
- _RLD_ARGS -v
-
-
-
-
-
-
-
-
-
-
-
-
- - 3 -
-
-
-
- and redirect all output to a file. Look for the
- addresses of the mmap() calls and of address of DSO
- load actions to find a free address range in which to
- place the arena. Compiling with some libraries
- statically can make this operation easier.
-
- +o Using 7.2 Compilers you may encounter 'Unresolved
- symbol ___rcis'. Install patch 2483 (or its successor)
- - "7.2 compiler runtime environment for IRIX
- 6.2/6.3/6.4" to fix the problem
-
- +o The XSGIvc library on IRIX 6.2 did not support 64bit
- operation before patch 1808 and so functionality
- requiring XSGIvc, such as dynamic video resize, are
- currently not enabled when running 64bit.
-
- +o IRIS GL is not recommended on any OpenGL native
- machines such as O2, Octane, IMPACT graphics or
- InfiniteReality -- OpenGL operation should be used
- instead.
-
- +o Overflowing texture memory when using Clipmapping can
- cause texture corruption. This is a bug in OpenGL in
- InfiniteReality. If you try to run cliptex -2 mof.ct
- (forcing both 2 windows and 2 cliptextures), you will
- may get garbage texture and extremely slow (even locked
- up) performance. This is due to a known bug in the iR
- OpenGL: cliptextures can't be swapped in texture
- memory. It will also happen with perfly, and with
- cliptex -3 hl.ct if you partially fill the texture
- memory with other running programs first. So if you
- overfill your texture memory with cliptextures, you
- will see this behavior.
-
- +o When linking executables with Performer libraries, an
- alarming number of warnings about symbols that are
- defined in multiple .so's may be printed. These are
- harmless but the appropriate compiler option to disable
- the warning has not yet been identified.
-
- +o On RealityEngine graphics, when more than 512 textures
- are used the hardware and or host-side software may
- become confused and in some cases, may falter
- completely and terminate the application. This is a
- graphics library limitation: IRIS Performer has no
- limit to the number of textures.
-
- +o On other graphic systems than RealityEngine and
- InfiniteReality, the video rate used by IRIS Performer
- for frame rate control is computed at application
- startup on some machines and is not always exactly
-
-
-
-
-
-
-
-
-
-
-
- - 4 -
-
-
-
- correct. The problem is greatly aggravated when the
- system's load average is at least one process per cpu,
- so it is best to start a Performer app when the system
- is otherwise quiet. If this is a problem, the video
- rate can be set with _p_f_V_i_d_e_o_R_a_t_e or run locked to a
- processor by using _p_f_u_L_o_c_k_D_o_w_n_P_r_o_c (the -L option in
- perfly).
-
- +o Although IRIS Performer supports it, the OpenGL
- rendering model does not support different material
- color modes for front and back materials. When
- Performer encounters this case, it disables (ignores)
- the material color mode for the back material when
- using OpenGL.
-
-
-
- 4.3 _IIII_RRRR_IIII_XXXX_6666_...._2222 _aaaa_nnnn_dddd _6666_...._4444 _aaaa_nnnn_dddd _NNNN_3333_2222_////_6666_4444_bbbb_iiii_tttt
-
- +o _V_i_d_e_o _c_h_a_n_n_e_l _c_o_n_t_r_o_l _a_n_d _d_y_n_a_m_i_c _r_e_s_i_z_e: The XSGIvc
- X11 extension for video control did not support 64 bit
- operation in IRIX 6.2 and 6.4. This is fixed in IRIX
- 6.5. IRIS Performer 2.2.2 will support support video
- channel control under 64bit operation on IRIX 6.5 and
- later.
-
- +o _S_t_a_t_i_s_t_i_c_s: The PFSTATSHW_CPU pfStats statistics class
- for accumulation of statistics on CPU usage are not yet
- implemented for IRIX6 operation (64-bit or 32-bit).
-
-
-
- 4.4 _IIII_nnnn_ffff_iiii_nnnn_iiii_tttt_eeee_RRRR_eeee_aaaa_llll_iiii_tttt_yyyy
-
- _G_a_n_g _S_w_a_p pfChanCalligEnable() [perfly -U] will not set
- up GangSwap correctly in multipipe configurations. The
- visible result is a 1Hz frame rate, even without
- database [the same thing happen if you start GangSwap
- and you do not have the SwapReady cables linking the
- pipes together]. You will have to force the GangSwap
- using PFCHAN_SWAPBUFFERS_HW attribute in addition to
- pfChanCalligEnable() [perfly -G -U ...]
-
- +o _V_i_d_e_o _c_h_a_n_n_e_l _c_o_n_t_r_o_l _a_n_d _X: X primitives will not be
- knowledgeable of video resizing operations. This means
- that on a resized video channel, the X cursor will not
- be drawn in the proper location or of the proper size,
- and X menus may be unusable.
-
- +o _V_i_d_e_o _c_h_a_n_n_e_l _c_o_n_t_r_o_l _a_n_d _m_u_l_t_i_p_l_e _a_p_p_l_i_c_a_t_i_o_n_s: On
- InfiniteReality, only one application may be bound to a
-
-
-
-
-
-
-
-
-
-
-
- - 5 -
-
-
-
- video channel. If, for example, two copies of perfly
- are running, only one may do dynamic resizing of a
- video channel. Additionally, if a second application
- attempts to bind to the video channel while the first
- is still executing, it will incur an X error and may
- terminate. See the pfVideoChannel reference page for
- more information.
-
- +o _G_r_a_p_h_i_c_s _p_i_p_e_l_i_n_e _s_t_a_t_i_s_t_i_c_s _a_n_d _m_u_l_t_i_p_l_e _a_p_p_l_i_c_a_t_i_o_n_s:
- In base IRIX6.x on InfiniteReality, only one
- application may be doing graphics pipeline statistics
- at a time. If a second application attempts to collect
- graphics pipeline statistics simultaneously with the
- first, the second application may hang. If for
- example, there are two copies of perfly executing, one
- should only select graphics pipeline statistics in one
- at a time and disable them in one program before
- enabling them in another.
-
- +o _F_i_l_l _s_t_a_t_i_s_t_i_c_s _a_n_d _G_r_a_p_h_i_c_s _p_i_p_e_l_i_n_e _s_t_a_t_i_s_t_i_c_s:
- InfiniteReality on base IRIX 6.X does not support
- simultaneous usage of fill stats and graphics pipeline
- statistics. If both of these modes are enabled
- simultaneously, even through separate programs,
- "KONA_DMAREAD: Resource busy" error messages will be
- generated. IRIS Performer 2.2.2 does not allow the
- Application to enable both simultaneously.
-
- +o _F_r_a_m_e _b_u_f_f_e_r _r_e_a_d _b_a_c_k _a_n_d _D_V_R InfiniteReality does not
- support read back from the frame buffer when DVR is in
- use. Performer will not prevent that to happen, for
- example asking for fill stats when DVR is on.
-
- +o InfiniteReality does not support DVR on X for video
- larger than 1280. IRIS Performer will resize only in
- the Y direction to prevent the whole screen from being
- garbage.
-
- +o _V_i_s_u_a_l_s _f_o_r _O_p_e_n_G_L/_X: InfiniteReality does not support
- 10 bits RGB with alpha plane. Only 12 bits per
- component is supported when the alpha plane is enabled.
-
-
-
- 4.5 _llll_iiii_bbbb_pppp_rrrr
-
- +o _p_f_F_l_u_x_e_s: can run out of valid buffers for updating
- slow readers. If you are running Lock or Float Phase,
- and if the App is much faster than the Cull/Draw then
- Draw process may not be able to catch up and use non up
- to date data until the App slows down. For morphing
-
-
-
-
-
-
-
-
-
-
-
- - 6 -
-
-
-
- applications that require eye-frame-accurate data to be
- passed from the APP or CULL to the DRAW process, a
- workaround is to use pfCycleBuffer instead of pfFlux.
-
- +o _A_n_t_i_a_l_i_a_s_i_n_g: When it is not multisampling, _p_f_A_n_t_i_a_l_i_a_s
- can significantly degrade performance. Specifically,
- on systems other than InfiniteReality and
- RealityEngine, use _p_f_A_n_t_i_a_l_i_a_s only for lines and
- points.
-
- +o _C_o_p_l_a_n_a_r _p_o_l_y_g_o_n_s: _p_f_D_e_c_a_l works only on machines that
- support the _s_t_e_n_c_i_l or _d_i_s_p_l_a_c_e_p_o_l_y_g_o_n command. The
- default decaling mode for PFDECAL_BASE uses
- _d_i_s_p_l_a_c_e_p_o_l_y_g_o_n instead of _s_t_e_n_c_i_l. This can
- significantly improve rendering performance on some
- machines but can also result in visual anomalies where
- layer polygons incorrectly "poke" through other
- geometry. If you wish to use stencil then specify the
- PFDECAL_BASE_HIGH_QUALITY token. In addition the new
- reference plane mode is supported only on
- InfiniteReality and only with patch 1808 or equiv.
-
- +o _S_t_e_n_c_i_l: stencil is used for PFDECAL_BASE_HIGH_QUALITY
- and for pfStats mode PFSTATSHW_GFXPIPE_FILL. The
- Extreme graphics platform supports stencil with reduced
- depth buffer resolution so IRIS Performer will not
- allocate stencil bits in the default framebuffer
- configuration. While allocated by default, the
- allocation of extra stencil bits can also affect your
- depth resolution and number of samples for multisample
- on InfiniteReality and RealityEngine graphics
- platforms.
-
- +o _T_r_a_n_s_p_a_r_e_n_c_y: _p_f_T_r_a_n_s_p_a_r_e_n_c_y works only on machines
- that support either _b_l_e_n_d_f_u_n_c_t_i_o_n or _m_u_l_t_i_s_a_m_p_l_e
- (InfiniteReality and RealityEngine).
-
- +o Since having other applications running can impact
- real-time performance, it's sometimes desirable to
- minimize the number of daemons and other processes. If
- you have problems achieving real-time behavior, try the
- _p_f_u_L_o_c_k_C_P_U utility code in _l_i_b_p_f_u_t_i_l. You might also
- try turning off the desktop support and other daemons
- that are not crucial to your application, e.g.:
-
- % touch ~/.disableDesktop
-
- or
-
- % mkdir ~/.desktop-<machinename>
- % touch ~/.desktop-<machinename>/nodesktop
-
-
-
-
-
-
-
-
-
-
-
- - 7 -
-
-
-
- and for total removal do:
-
- % chkconfig desktop off
- % chkconfig objectserver off (gone in IRIX 6.5)
- % chkconfig directoryserver off
- % chkconfig fontserver off
-
-
- 4.6 _llll_iiii_bbbb_pppp_ffff
-
- +o Intersection testing of line segments (_p_f_N_o_d_e_I_s_e_c_t_S_e_g_s)
- against geometry in _p_f_B_i_l_l_b_o_a_r_d nodes is not yet
- implemented; only the bounding sphere of the entire
- _p_f_B_i_l_l_b_o_a_r_d is available.
-
- +o _C_h_a_n_n_e_l _f_a_d_e _L_O_D _a_t_t_r_i_b_u_t_e_s _a_n_d _m_i_x_e_d _g_r_a_p_h_i_c_s
- _c_o_n_f_i_g_u_r_a_t_i_o_n_s: Channel fade LOD attributes are set in
- the application process. The existence of multisample,
- required for fade LOD, is tested at the time that the
- attributes are set with _p_f_C_h_a_n_L_O_D_A_t_t_r. This test for
- multisample uses the application process window system
- connection (_p_f_O_p_e_n_W_S_C_o_n_n_e_c_t_i_o_n) or else the DISPLAY
- environment variable to select a screen for determining
- graphics configuration, rather than testing the current
- window of the pfChannel. In a multipipe environment
- where one graphics pipeline has multisample capability
- (for example, with or without sufficient Raster Manager
- boards for the chosen framebuffer resolution) and one
- does not, the application process needs to have a
- window system connection or DISPLAY that points to the
- pipeline with multisample sufficiency, in which case
- the non-multisample pfChannels will try to use fade
- LOD. In a multi-window environment, windows without
- multisample on a system with multisample will try to
- use fade LOD.
-
- +o Triple-Keyboard Option(TKO) doesn't work for IRISGL.
- It works fine for OpenGL.
-
- +o _C_U_L_L_o_D_R_A_W process model does not work properly.
-
- +o _p_f_E_a_r_t_h_S_k_y does not work for offset viewing frustrum.
-
- +o _p_f_A_S_D has memory leaks in the database paging. Your
- applicaion may run out of memory after several ASD
- tiles paging.
-
- +o _p_f_A_S_D has alignment timing problem. When the number of
- triangles in pfASD is large, there might be
- inconsistency in position updates of moving vehicles on
- terrain.
-
-
-
-
-
-
-
-
-
-
-
- - 8 -
-
-
-
- +o If you explicitly edit the _p_f_T_e_x_t_u_r_e, and then remove
- all reference to TexLOD, the texLOD is not destroyed.
- This is also consistent with our apply{Min,Max}LOD
- behavior.
-
- +o _N_6_4 static perfly fail to link in compilation.
-
- +o When excuting _c_l_i_p_f_l_y, on the first few frames the
- virtual LOD offset and other params seem to be bogus,
- as if the node CULL func that sets it is not getting
- executed or not having the proper effect.
-
- +o _M_u_l_t_i _T_h_r_e_a_d_e_d _s_t_a_g_e_s get only one configStage
- callback.
-
- +o Performer applications die with an X error when run on
- remote IMPACT display on which IRIX6.4 IMPACT Patch
- 1935 is installed. If you need to do remote rendering
- on an IMPACT display, do not install patch 1935 or
- upgrade to a more recent IMPACT patch (2677 or
- replacement).
-
- +o _p_f_C_l_i_p_T_e_x_t_u_r_e doesn't work with 8bit luminance data on
- IMPACT patch 1935. It might be fixed in future IMPACT
- patches.
-
- +o For _p_f_S_C_S (and _p_f_S_C_S which is derived from it), the
- value of pfGetTravMat() is not well-behaved-- sometimes
- it returns a matrix that includes the pfSCS
- transformation and sometimes not. The semantics
- (according to the man page) may change and become more
- sane in future patch releases of Performer 2.2.
-
-
- 4.7 _llll_iiii_bbbb_pppp_ffff_uuuu_tttt_iiii_llll
-
- +o Calling _p_f_u_N_e_w_C_l_i_p_C_e_n_t_e_r_N_o_d_e or _p_f_u_N_e_w_M_P_C_l_i_p_C_e_n_t_e_r_N_o_d_e
- on a pfGeode (possibly other types as well) as a child
- when a pfdBuilder is being used to create a scene graph
- (e.g. in the .im loader) can result in the callback
- being lost. One workaround is to create a dummy
- pfGroup node above the pfGeode and use that instead.
-
- +o The implementation of _p_f_u_G_e_t_C_l_o_s_e_s_t_P_o_i_n_t (and therefore
- _p_f_u_N_e_w_C_l_i_p_C_e_n_t_e_r_N_o_d_e which uses it) assumes that all
- coordinate scaling in pfSCS and pfDCS nodes in the
- scene are uniform, i.e. that the scale factor is the
- same in all three coordinate axis directions. If this
- is not the case, the answer returned will be valid
- coordinates (and texture coordinates) of a point on a
- triangle, but it may not be the actual closest point.
-
-
-
-
-
-
-
-
-
-
-
- - 9 -
-
-
-
- +o In the case of degenerate triangles the coordinates
- returned by _p_f_u_G_e_t_C_l_o_s_e_s_t_P_o_i_n_t may not be on or close
- to an object at all.
-
- +o _p_f_u_G_e_t_C_l_o_s_e_s_t_P_o_i_n_t does not traverse point or line
- primitives.
-
- +o Interaction of _p_f_u_G_e_t_C_l_o_s_e_s_t_P_o_i_n_t with automatic
- texture coordinate generation is very limited. Only
- PFTG_OBJECT_LINEAR is supported, and then only when a
- pfTexGen is explicitly attached to the pfGeoSet's
- pfGeoState, and even this has not been well tested.
- The safest approach is to specify texture coordinates
- explicitly.
-
-
- 4.8 _llll_iiii_bbbb_pppp_ffff_uuuu_iiii
-
- +o Libpfui has both a C API and a C++ API. The C API is
- actually wrappers around the C++ API and is not
- complete.
-
-
- 4.9 _llll_iiii_bbbb_pppp_ffff_dddd_bbbb
-
- +o _p_f_d_L_o_a_d_F_i_l_e__d_x_f: The DXF loader does not fully support
- the format.
-
- +o _p_f_d_L_o_a_d_F_i_l_e__s_g_o: The SGO loader does not support
- triangle strips.
-
- +o _p_f_b file format does not support ClipMap textures.
-
-
- 4.10 _SSSS_aaaa_mmmm_pppp_llll_eeee _PPPP_rrrr_oooo_gggg_rrrr_aaaa_mmmm_ssss
-
- +o _p_g_u_i_d_e/_l_i_b_p_u_i/_m_o_t_i_f_x_f_o_r_m_e_r: The motifxformer.c program
- dumps core when loading new files in N32 or 64-bit with
- 6.2 and 6.3. This Motif bug has been fixed in 6.4.
-
- +o _p_g_u_i_d_e/_l_i_b_p_f/_C/_l_p_s_t_a_t_e: The lpstate.c example for
- demonstrating pfLPointStates assumes sophisticated
- texturing capabilities that may not be fully supported
- on IMPACT, Extreme, or Indy graphics platforms.
-
- +o _p_e_r_f_l_y _n_e_e_d_s _f_u_l_l _s_c_r_e_e_n _w_i_n_d_o_w _f_o_r _D_V_R: When running
- perfly and using dynamic video resolution (DVR), perfly
- should be run with a full-screen, no-border window (ie,
- do not use the -W option). If run from a smaller, or
- bordered, window, the resizing will be very apparent as
- it affects the entire video channel (which is usually
-
-
-
-
-
-
-
-
-
-
-
- - 10 -
-
-
-
- the entire screen for normal workstation operation).
-
- +o _p_e_r_f_l_y _w_i_t_h _A_u_t_o_m_a_t_i_c-_D_V_R _w_i_l_l _b_e _r_e_d_r_a_w_i_n_g _G_U_I _w_h_e_n
- _e_n_a_b_l_e_d: When the graphical user-interface (GUI) is
- enabled and DVR is on, the GUI must be redrawn whenever
- there is a video channel resize, or whenever the mouse
- is in the GUI. This is very expensive and a drop in
- framerate will be incurred.
-
- +o _7._2 _c_o_m_p_i_l_e_r_s compilers warn about the obsolete and no
- longer support Olimit flag that has to be replaced with
- -OPT:Olimit=n in the makefile.
-
- +o The default pfGeoState applied to the textured font
- loaded with pfdLoadFont_type1( "anyFontName",
- PFDFONT_TEXTURED ) ) has a transparency setting of
- PFTR_ON | PFTR_NO_OCCLUDE. This causes major rendering
- problems for the text. WAR: manually set this value to
- PFTR_ON and everything works right.
-
-
- 4.11 _N_o_t_e_s__o_n__S_h_a_r_e_d__M_e_m_o_r_y__C_o_n_f_i_g_u_r_a_t_i_o_n_s
-
- IRIS Performer requires shared memory and uses a memory-
- mapped file, the location of which depends on the value of
- the PFTMPDIR environment variable:
-
- +o If PFTMPDIR is not set, Performer uses /_d_e_v/_z_e_r_o as the
- default. Running an application in this configuration:
-
- - Uses swap space
-
- - Does not require disk space until main memory is
- exhausted
-
- - Is faster than using a regular memory mapped file
- via PFTMPDIR
-
- - Causes IRIX to kill the process(es) and log an
- error to the console if the application runs out
- of space for shared memory in the swap partition.
-
- +o If PFTMPDIR is set, Performer creates files in the
- specified directory. Running an application in this
- configuration:
-
- - Requires disk space even before main memory is
- exhausted
-
- - Is slower than /_d_e_v/_z_e_r_o because it touches the
- disk
-
-
-
-
-
-
-
-
-
-
-
- - 11 -
-
-
-
- - Produces appropriately sized core dump files with
- no limit set by IRIS Performer
-
- - Might cause a core dump from a segmentation
- violation inside _p_f_M_a_l_l_o_c if the application runs
- out of space for shared memory in the file system
- containing PFTMPDIR
-
- - PFTMPDIR should be set only to a directory on a
- local file system.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-